

package com.scs.application.modules.order.entity;

import com.alibaba.fastjson.annotation.JSONField;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.scs.application.core.model.DataEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import lombok.experimental.Accessors;
import org.hibernate.validator.constraints.Length;
import org.springframework.format.annotation.DateTimeFormat;

import javax.validation.constraints.*;
import java.io.Serializable;
import java.util.Date;
import java.util.List;

/**
 * 发货单明细实体对象
 *
 */
@TableName("delivery_item")
@Data
@EqualsAndHashCode(callSuper = false)
@ToString(callSuper = true)
@Accessors(chain = true)
public class DeliveryItem extends DataEntity  implements Serializable {

    /** 发货单ID */
    @NotNull(message="发货单ID不能为空")
    private String deliveryId;


    /** 订单明细ID */
    //@NotNull(message="订单明细ID不能为空")
    private String poItemId;

    /** 商品规格ID */
    @NotNull(message="商品规格ID不能为空")
    private String materialSpecId;

    /** 商品编码 */
//    @NotNull(message="商品编码不能为空")
    private String materialCode;

    /** 商品代码 */
//    @NotBlank(message="商品代码不能为空")
//    @Length(min=1, max=20, message="商品代码长度必须介于 1 和 20 之间")
    private String materialErpCode;

    /** 商品名称 */
    @NotBlank(message="商品名称不能为空")
    @Length(min=1, max=100, message="商品名称长度必须介于 1 和 100 之间")
    private String materialName;

    /** 商品通用名 */
    //@NotBlank(message="商品通用名不能为空")
    //@Length(min=1, max=100, message="商品通用名长度必须介于 1 和 100 之间")
    private String materialTradeName;

    /** 规格 */
    @Length(min=1, max=100, message="规格长度必须介于 1 和 100 之间")
    private String materialSpec;

    /** 厂商名称 */
    //@NotBlank(message="厂商名称不能为空")
    //@Length(min=1, max=100, message="厂商名称长度必须介于 1 和 100 之间")
    private String manufacturerName;

    /** 剂型 */
    /*private String form;*/

    /** 价格 */
    @NotNull(message="价格不能为空")
    private Double price;

    /** 应发数量 */
    //@NotNull(message="应发数量不能为空")
    private Double shouldDeliveryQty;

    /** 已发数量 */
    //@NotNull(message="已发数量不能为空")
    private Double deliveredQty;

    /** 本次实发 */
    @DecimalMin(value = "0.0")
    @Digits(integer = 6 ,fraction = 3)
    private Double qty;

    /** 小计(元) */
    private Double subtotalAmount;

    /** 发货单位 */
    private String orderUnit;

    /** 发货单位数量 */
    private Double orderQty;

    /** 订单单位价格**/
    @TableField(exist = false)
    private Double orderPrice;

    /** 单位 */
    @Length(min=1, max=4, message="单位长度必须介于 1 和 4 之间")
    private String unit;

    /** 批次 */
    @NotNull(message = "批次不能为空")
    private String lot;

    /** 供方销售批次 */
    private String saleLot;

    /** 生产日期 */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JSONField(format = "yyyy-MM-dd")
    @Past(message = "生产日期不能晚于当前时间")
    @NotNull(message = "生产日期不能为空")
    private Date productionDate;
    //厂家序号
    private String mfgSn;

    /** 有效日期 */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JSONField(format = "yyyy-MM-dd")
    @Future(message = "过期日期不能早于当前时间")
    @NotNull(message = "效期不能为空")
    private Date  expiredDate;

    /** 灭菌日期 */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JSONField(format = "yyyy-MM-dd")
    private Date sterilizationDate;

    /** 注册证号 */
    private String  certificateNo;


    /** 备注 */
//    @Length(max=100, message="备注长度必须介于 0 和 100 之间")
    private String remark;

    /** 数量 */
    private Integer deliveryNumber;

    /** udi */
    @TableField(strategy = FieldStrategy.IGNORED)
    private String udi;

    /** 中标号 */
    private String bidNo;

    /** 发货单sn序列号 */
    @TableField(exist = false)
    private List<String> sns;

    /** 阳采代码 */
    private String sunPurchaseCode;

    /** 阳采代码规格Id */
    private String sunPurchaseSpecId;

    /** 第三方采购平台配送明细Id */
    private String thirdDistId;

    /** 是否挂单(中八) */
    @TableField(exist = false)
    private String hasSunPurchaseCode;

    /**
     * 医用耗材编码
     */
    private String medicalConsumablesCode;


    /**
     * udi
     */
    @TableField(exist = false)
    private String udiSpec;

    /** 发货单位 */
    @TableField(exist = false)
    private String orderUnitSelect;

    /** 发货单位 */
    @TableField(exist = false)
    private String unitSelect;
}
